package br.edu.ufcg.dsc.lp2.projeto.tests.model;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.junit.Assert;

import br.edu.ufcg.dsc.lp2.projeto.model.Arquivo;
import br.edu.ufcg.dsc.lp2.projeto.model.Estabelecimento;
import br.edu.ufcg.dsc.lp2.projeto.model.Usuario;
import br.edu.ufcg.dsc.lp2.projeto.model.exceptions.CaminhoInvalidoException;

public class ArquivoTest {

	@Before
	public void setUp() {
		arquivo = new Arquivo(
				"C:\\Documents and Settings\\GABRIELA\\Desktop\\NewProject\\Arquivos\\Estabelecimentos.data");
		// PS.: Nao sei como colocar de forma generalizada, entao coloquei
		// os teste com o endereco do arquivo em meu computador.
	}

	@Test(expected = CaminhoInvalidoException.class)
	public void testCaminhoInvalidoVazio() {
		new Arquivo("");
	}

	@Test(expected = CaminhoInvalidoException.class)
	public void testCaminhoInvalidoNull() {
		new Arquivo(null);
	}

	@Test
	public void testGetCaminho() {
		Assert.assertEquals(
				"C:\\Documents and Settings\\GABRIELA\\Desktop\\NewProject\\Arquivos\\Estabelecimentos.data",
				arquivo.getCaminho());
	}

	@Test
	public void testSetCaminho() {
		try {
			File arquivoTemp = File.createTempFile("teste1", ".txt",
					new File(System.getProperty("user.dir")));
			arquivoTemp.deleteOnExit();
			
			arquivo.setCaminho(arquivoTemp.getAbsolutePath());
			Assert.assertTrue(arquivoTemp.getAbsolutePath().equals(arquivo.getCaminho()));
			
		} catch (IOException e) {
			// Algum erro aconteceu
		}

	}

	@Test
	public void testLer() {
		// Varifica que e um arquivo valido. E possivel ler.
		Assert.assertTrue(!arquivo.ler().isEmpty());
	}

	@Test
	public void testAdiciona() {
		List<Estabelecimento> estab = new ArrayList<Estabelecimento>();
		estab.add(new Estabelecimento("Olavo", "Ufcg", "Self-service"));
		Usuario usuario = new Usuario("Monica", estab);
		Arquivo arquivoTemp;

		try {
			File arquivo = File.createTempFile("teste2", ".txt",
					new File(System.getProperty("user.dir")));
			arquivo.deleteOnExit();

			arquivoTemp = new Arquivo(arquivo.getAbsolutePath());
			arquivoTemp.adicionar(usuario);

			// Verifica que o arquivo nao esta vazio. Usuario foi adicionado!
			Assert.assertTrue(!arquivoTemp.ler().isEmpty());

		} catch (IOException e) {
			// Algum erro aconteceu
		}

	}

	private Arquivo arquivo;

}
